home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 124 / cd-rom 124.iso / edu / tuxmath / tuxmathscrabble / asymptopia / AnimatedChar.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-11-16  |  7.6 KB  |  195 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.2)
  3.  
  4. '''
  5. /***************************************************************************
  6.  
  7. \tAuthor \t\t\t:Charles B. Cosse 
  8. \t
  9. \tEmail\t\t\t:ccosse@asymptopia.com
  10. \t\t\t\t\t
  11. \tCopyright\t\t:(C) 2002,2003 Asymptopia Software.
  12. \t
  13.  ***************************************************************************/
  14. /***************************************************************************
  15.                          AnimatedChar.py
  16.  
  17.  ***************************************************************************/
  18.  
  19. /***************************************************************************
  20.  *                                                                         *
  21.  *   This program is free software; you can redistribute it and/or modify  *
  22.  *   it under the terms of the GNU General Public License as published by  *
  23.  *   the Free Software Foundation; either version 2 of the License, or     *
  24.  *   (at your option) any later version. (Please note that if you use this *
  25.  *   code you must give credit by including the Author and Copyright       *
  26.  *   info at the top of this file).                                        *
  27.  ***************************************************************************/
  28.  
  29. '''
  30. import os
  31. import pygame
  32. import sys
  33. from pygame.locals import *
  34. from random import random
  35. import time
  36.  
  37. class AnimatedChar(pygame.sprite.Sprite):
  38.     
  39.     def __init__(self, seqpyld, xc0, yc0):
  40.         pygame.sprite.Sprite.__init__(self)
  41.         self.seqpyld = seqpyld
  42.         self.seqname = None
  43.         self.frame = None
  44.         self.image = seqpyld[seqpyld.keys()[0]][0]['img']
  45.         self.rect = self.image.get_rect()
  46.         self.rect.center = (xc0, yc0)
  47.         self.dx = None
  48.         self.dy = None
  49.         self.timeout = None
  50.         self.dest = None
  51.         self.xc = xc0
  52.         self.yc = yc0
  53.         self.idx = 0
  54.         self.stationary_idx = 0
  55.         self.maneuver_stack = []
  56.  
  57.     
  58.     def update(self):
  59.         if not (self.dest):
  60.             return None
  61.         
  62.         if not (self.rect):
  63.             return None
  64.         
  65.         if not -999:
  66.             pass
  67.         if self.dest[0] != None:
  68.             if self.idx < len(self.seqpyld[self.seqname]) - 1:
  69.                 self.frame = self.seqpyld[self.seqname][self.idx]
  70.                 self.image = self.frame['img']
  71.                 self.idx = self.idx + 1
  72.             else:
  73.                 self.frame = self.seqpyld[self.seqname][self.idx]
  74.                 self.image = self.frame['img']
  75.                 self.idx = 0
  76.             self.xc = self.xc + self.frame['dx']
  77.             self.yc = self.yc + self.frame['dy']
  78.             self.rect = self.image.get_rect()
  79.             self.rect.center = (self.xc, self.yc)
  80.             r2 = 2 * pow(self.frame['dx'], 2) + 2 * pow(self.frame['dy'], 2)
  81.             dist = pow(self.dest[0] - self.rect.center[0], 2) + pow(self.dest[1] - self.rect.center[1], 2)
  82.             if dist <= r2:
  83.                 self.xc = self.dest[0]
  84.                 self.yc = self.dest[1]
  85.                 self.unset_dest()
  86.                 self.idx = 0
  87.                 if len(self.maneuver_stack) > 0:
  88.                     self.set_dest(self.maneuver_stack.pop())
  89.                 
  90.             
  91.             return `self.rect.center`
  92.         elif self.dest[0] == -999:
  93.             if self.stationary_idx <= self.dest[1]:
  94.                 
  95.                 try:
  96.                     self.frame = self.seqpyld[self.seqname][self.idx]
  97.                 except Exception:
  98.                     e = None
  99.                     print `e`, self.seqname, self.idx, self.stationary_idx, self.dest
  100.  
  101.                 self.image = self.frame['img']
  102.                 self.xc = self.xc + self.frame['dx']
  103.                 self.yc = self.yc + self.frame['dy']
  104.                 self.rect = self.image.get_rect()
  105.                 self.rect.center = (self.xc, self.yc)
  106.                 self.idx = self.idx + 1
  107.                 if self.idx >= len(self.seqpyld[self.seqname]):
  108.                     self.idx = 0
  109.                     self.stationary_idx = self.stationary_idx + 1
  110.                 
  111.             else:
  112.                 self.unset_dest()
  113.                 self.idx = 0
  114.                 self.stationary_idx = 0
  115.                 if len(self.maneuver_stack) > 0:
  116.                     self.set_dest(self.maneuver_stack.pop())
  117.                     self.stationary_idx = self.stationary_idx + 1
  118.                 
  119.             return `self.rect.center`
  120.         
  121.  
  122.     
  123.     def set_seqname(self, seqname):
  124.         self.seqname = seqname
  125.         self.frame = self.seqpyld[seqname][0]
  126.         self.image = self.frame['img']
  127.         self.rect = self.image.get_rect()
  128.         self.rect.center = (self.xc, self.yc)
  129.         self.dx = self.frame['dx']
  130.         self.dy = self.frame['dy']
  131.         self.timeout = self.frame['timeout']
  132.         self.stationary_idx = 0
  133.  
  134.     
  135.     def unset_seqname(self):
  136.         self.seqname = None
  137.         self.frame = None
  138.         self.dx = None
  139.         self.dy = None
  140.         self.timeout = None
  141.  
  142.     
  143.     def set_dest(self, dest):
  144.         self.set_seqname(dest.keys()[0])
  145.         self.dest = dest[self.seqname]
  146.  
  147.     
  148.     def unset_dest(self):
  149.         self.unset_seqname()
  150.         self.dest = None
  151.  
  152.     
  153.     def set_center(self, center):
  154.         self.xc = center[0]
  155.         self.yc = center[1]
  156.  
  157.     
  158.     def get_seqname(self):
  159.         return self.seqname
  160.  
  161.     
  162.     def get_dest(self):
  163.         return self.dest
  164.  
  165.     
  166.     def get_timeout(self):
  167.         
  168.         try:
  169.             return self.frame['timeout']
  170.         except:
  171.             return 0
  172.  
  173.  
  174.     
  175.     def get_sound(self):
  176.         
  177.         try:
  178.             return self.frame['snd']
  179.         except:
  180.             return None
  181.  
  182.  
  183.     
  184.     def begin_maneuver(self, maneuver):
  185.         if len(maneuver) > 0:
  186.             self.set_dest(maneuver[0])
  187.         
  188.         if len(maneuver) > 1:
  189.             for idx in range(len(maneuver) - 1, 0, -1):
  190.                 self.maneuver_stack.append(maneuver[idx])
  191.             
  192.         
  193.  
  194.  
  195.